package com.brayan.melinxa.logic.shadowers.locations;

import com.brayan.melinxa.logic.shadowers.credentials.LoginCredentials;

/**
 * The super interface for every source or destination of a shadower.
 * 
 * @author Brayan Zimmerli
 * 
 */
public interface ShadowerLocation {

	/**
	 * A possible instance of {@link LoginCredentials}. Not every Location
	 * requires though authentication and authorization.
	 * 
	 * @return LoginCredential Expect this to return null, if this location has
	 *         no need for security e.g. a local file system.
	 */
	public LoginCredentials getLoginCredentials();

	/**
	 * Set the {@link LoginCredentials} if this location requires authentication
	 * and authorization.
	 */
	public void setLoginCredentials(LoginCredentials loginCredentials);

	/**
	 * Invoke the validation (validity) and verification (correctness) of the
	 * location. Return true if the location is accessible, otherwise false.
	 * @return boolean Return true if location is valid.
	 */
	public boolean isValid();

}
